package com.cskaoyan.javase.basic._2variable._3notice;
/**
 * 基本数据类型的数据类型转换
 * Java是强类型语言,变量的类型一旦确定,不能任意被修改,但是还是可以修改的,需要一定的条件.
 *
 * 基本数据类型的数据类型转换,只能发生在数值类型之间:
 *      byte,short,char,int,long,float,double
 * 但boolean不参与任何数据类型转换.
 *
 * 数据类型转换的分类:
 *      1.自动类型转换,指的是程序员不写任何代码做类型转换,依赖于编译自动完成类型转换.
 *      2.强制类型转换,编译器不主动做类型转换,而是需要程序员写代码强制完成类型转换
 *
 * 基本数据类型的类型转换,要看数值类型的取值范围
 * 基本数据类型的自动类型转换:
 *      条件: 由小取值范围的数据类型转换到大取值范围的数据类型的过程
 *              小取值范围的数据类型(是杯子中的水) --> 大取值范围的数据类型(长江中的水)
 *              这个过程自动完成
 *              思考: 自动类型转换,就一定不会出问题吗?
 *                  是有可能的,不是绝对安全的
 *                  由int --> float时会出现浮点数有效位数限制导致的精度丢失的问题
 *                  还有long --> float和double也会出现这样的问题
 *                  当然,一般情况下,自动类型转换都不会出现精度问题
 *
 * 基本数据类型的强制类型转换:
 *      条件: 由大取值范围的数据类型转换到小取值范围的数据类型的过程
 *          大取值范围的数据类型(长江中的水) --> 小取值范围的数据类型(是杯子中的水)
 *          这个过程编译器不会自动完成,需要程序员写代码强制完成类型转换
 *          语法:
 *          强转后的数据类型 变量名 = (强转后的数据类型)变量名
 *      注意:
 *          强转是大到小,数值是经常发生溢出的,数据就会失真,就会被改变
 *          所以做强转的时候,要慎重考虑,稍有不慎就不是原先的数值的.
 *
 * @since 15:13
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo3 {
    public static void main(String[] args) {
        // 这里存在int --> long的过程,是一个自动的过程
        long a = 100;
        // 这里存在double --> float的过程,是一个强制类型转换
        float b = (float) 0.1;
        // num有11位
        int num = 1234567891;
        float numF = num;
        System.out.println(numF);

        // 其他的强制类型转换举例
        /*
            快速强转的两种办法:
                .cast
                alt + 回车
         */
        int num2 = (int) 1.5;
        System.out.println(num2);

        char c = (char) -1;
        System.out.println(c);
        System.out.println(c + 0);
    }
}
